// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Mirror API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/glass'>Google Mirror API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20170314 (803)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/glass'>
 *              https://developers.google.com/glass</a>
 *      <tr><th>Discovery Name<td>mirror
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Mirror API can be found at
 * <a href='https://developers.google.com/glass'>https://developers.google.com/glass</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Mirror.v1
{
    /// <summary>The Mirror Service.</summary>
    public class MirrorService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public MirrorService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public MirrorService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            accounts = new AccountsResource(this);
            contacts = new ContactsResource(this);
            locations = new LocationsResource(this);
            settings = new SettingsResource(this);
            subscriptions = new SubscriptionsResource(this);
            timeline = new TimelineResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "mirror"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/mirror/v1/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "mirror/v1/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Mirror API.</summary>
        public class Scope
        {
            /// <summary>View your location</summary>
            public static string GlassLocation = "https://www.googleapis.com/auth/glass.location";

            /// <summary>View and manage your Glass timeline</summary>
            public static string GlassTimeline = "https://www.googleapis.com/auth/glass.timeline";

        }



        private readonly AccountsResource accounts;

        /// <summary>Gets the Accounts resource.</summary>
        public virtual AccountsResource Accounts
        {
            get { return accounts; }
        }

        private readonly ContactsResource contacts;

        /// <summary>Gets the Contacts resource.</summary>
        public virtual ContactsResource Contacts
        {
            get { return contacts; }
        }

        private readonly LocationsResource locations;

        /// <summary>Gets the Locations resource.</summary>
        public virtual LocationsResource Locations
        {
            get { return locations; }
        }

        private readonly SettingsResource settings;

        /// <summary>Gets the Settings resource.</summary>
        public virtual SettingsResource Settings
        {
            get { return settings; }
        }

        private readonly SubscriptionsResource subscriptions;

        /// <summary>Gets the Subscriptions resource.</summary>
        public virtual SubscriptionsResource Subscriptions
        {
            get { return subscriptions; }
        }

        private readonly TimelineResource timeline;

        /// <summary>Gets the Timeline resource.</summary>
        public virtual TimelineResource Timeline
        {
            get { return timeline; }
        }
    }

    ///<summary>A base abstract class for Mirror requests.</summary>
    public abstract class MirrorBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new MirrorBaseServiceRequest instance.</summary>
        protected MirrorBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes Mirror parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "accounts" collection of methods.</summary>
    public class AccountsResource
    {
        private const string Resource = "accounts";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AccountsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Inserts a new account for a user</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="userToken">The ID for the user.</param>
        /// <param name="accountType">Account type to be passed to
        /// Android Account Manager.</param>
        /// <param name="accountName">The name of the account to be passed to the
        /// Android Account Manager.</param>
        public virtual InsertRequest Insert(Google.Apis.Mirror.v1.Data.Account body, string userToken, string accountType, string accountName)
        {
            return new InsertRequest(service, body, userToken, accountType, accountName);
        }

        /// <summary>Inserts a new account for a user</summary>
        public class InsertRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Account>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.Account body, string userToken, string accountType, string accountName)
                : base(service)
            {
                UserToken = userToken;
                AccountType = accountType;
                AccountName = accountName;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID for the user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userToken", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserToken { get; private set; }

            /// <summary>Account type to be passed to Android Account Manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountType", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AccountType { get; private set; }

            /// <summary>The name of the account to be passed to the Android Account Manager.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AccountName { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.Account Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "accounts/{userToken}/{accountType}/{accountName}"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userToken",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "accountType", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountType",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "accountName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "contacts" collection of methods.</summary>
    public class ContactsResource
    {
        private const string Resource = "contacts";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ContactsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Deletes a contact.</summary>
        /// <param name="id">The ID of the contact.</param>
        public virtual DeleteRequest Delete(string id)
        {
            return new DeleteRequest(service, id);
        }

        /// <summary>Deletes a contact.</summary>
        public class DeleteRequest : MirrorBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string id)
                : base(service)
            {
                Id = id;
                InitParameters();
            }


            /// <summary>The ID of the contact.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "contacts/{id}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a single contact by ID.</summary>
        /// <param name="id">The ID of the contact.</param>
        public virtual GetRequest Get(string id)
        {
            return new GetRequest(service, id);
        }

        /// <summary>Gets a single contact by ID.</summary>
        public class GetRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Contact>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string id)
                : base(service)
            {
                Id = id;
                InitParameters();
            }


            /// <summary>The ID of the contact.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "contacts/{id}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Inserts a new contact.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual InsertRequest Insert(Google.Apis.Mirror.v1.Data.Contact body)
        {
            return new InsertRequest(service, body);
        }

        /// <summary>Inserts a new contact.</summary>
        public class InsertRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Contact>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.Contact body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.Contact Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "contacts"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Retrieves a list of contacts for the authenticated user.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Retrieves a list of contacts for the authenticated user.</summary>
        public class ListRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.ContactsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }



            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "contacts"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates a contact in place. This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="id">The ID of the contact.</param>
        public virtual PatchRequest Patch(Google.Apis.Mirror.v1.Data.Contact body, string id)
        {
            return new PatchRequest(service, body, id);
        }

        /// <summary>Updates a contact in place. This method supports patch semantics.</summary>
        public class PatchRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Contact>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.Contact body, string id)
                : base(service)
            {
                Id = id;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the contact.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.Contact Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "contacts/{id}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a contact in place.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="id">The ID of the contact.</param>
        public virtual UpdateRequest Update(Google.Apis.Mirror.v1.Data.Contact body, string id)
        {
            return new UpdateRequest(service, body, id);
        }

        /// <summary>Updates a contact in place.</summary>
        public class UpdateRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Contact>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.Contact body, string id)
                : base(service)
            {
                Id = id;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the contact.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.Contact Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "contacts/{id}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "locations" collection of methods.</summary>
    public class LocationsResource
    {
        private const string Resource = "locations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public LocationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets a single location by ID.</summary>
        /// <param name="id">The ID of the location or latest for the last known location.</param>
        public virtual GetRequest Get(string id)
        {
            return new GetRequest(service, id);
        }

        /// <summary>Gets a single location by ID.</summary>
        public class GetRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Location>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string id)
                : base(service)
            {
                Id = id;
                InitParameters();
            }


            /// <summary>The ID of the location or latest for the last known location.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "locations/{id}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves a list of locations for the user.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Retrieves a list of locations for the user.</summary>
        public class ListRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.LocationsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }



            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "locations"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "settings" collection of methods.</summary>
    public class SettingsResource
    {
        private const string Resource = "settings";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public SettingsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets a single setting by ID.</summary>
        /// <param name="id">The ID of the setting. The following IDs are valid: - locale - The key to the user’s
        /// language/locale (BCP 47 identifier) that Glassware should use to render localized content.  - timezone - The key to
        /// the user’s current time zone region as defined in the tz database. Example: America/Los_Angeles.</param>
        public virtual GetRequest Get(string id)
        {
            return new GetRequest(service, id);
        }

        /// <summary>Gets a single setting by ID.</summary>
        public class GetRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Setting>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string id)
                : base(service)
            {
                Id = id;
                InitParameters();
            }


            /// <summary>The ID of the setting. The following IDs are valid: - locale - The key to the user’s
            /// language/locale (BCP 47 identifier) that Glassware should use to render localized content. - timezone -
            /// The key to the user’s current time zone region as defined in the tz database. Example:
            /// America/Los_Angeles.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "settings/{id}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "subscriptions" collection of methods.</summary>
    public class SubscriptionsResource
    {
        private const string Resource = "subscriptions";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public SubscriptionsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Deletes a subscription.</summary>
        /// <param name="id">The ID of the subscription.</param>
        public virtual DeleteRequest Delete(string id)
        {
            return new DeleteRequest(service, id);
        }

        /// <summary>Deletes a subscription.</summary>
        public class DeleteRequest : MirrorBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string id)
                : base(service)
            {
                Id = id;
                InitParameters();
            }


            /// <summary>The ID of the subscription.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "subscriptions/{id}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Creates a new subscription.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual InsertRequest Insert(Google.Apis.Mirror.v1.Data.Subscription body)
        {
            return new InsertRequest(service, body);
        }

        /// <summary>Creates a new subscription.</summary>
        public class InsertRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Subscription>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.Subscription body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.Subscription Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "subscriptions"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Retrieves a list of subscriptions for the authenticated user and service.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Retrieves a list of subscriptions for the authenticated user and service.</summary>
        public class ListRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.SubscriptionsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }



            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "subscriptions"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates an existing subscription in place.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="id">The ID of the subscription.</param>
        public virtual UpdateRequest Update(Google.Apis.Mirror.v1.Data.Subscription body, string id)
        {
            return new UpdateRequest(service, body, id);
        }

        /// <summary>Updates an existing subscription in place.</summary>
        public class UpdateRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Subscription>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.Subscription body, string id)
                : base(service)
            {
                Id = id;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the subscription.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.Subscription Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "subscriptions/{id}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "timeline" collection of methods.</summary>
    public class TimelineResource
    {
        private const string Resource = "timeline";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public TimelineResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            attachments = new AttachmentsResource(service);

        }

        private readonly AttachmentsResource attachments;

        /// <summary>Gets the Attachments resource.</summary>
        public virtual AttachmentsResource Attachments
        {
            get { return attachments; }
        }

        /// <summary>The "attachments" collection of methods.</summary>
        public class AttachmentsResource
        {
            private const string Resource = "attachments";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public AttachmentsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Deletes an attachment from a timeline item.</summary>
            /// <param name="itemId">The ID of the timeline item the attachment belongs to.</param>
            /// <param
            /// name="attachmentId">The ID of the attachment.</param>
            public virtual DeleteRequest Delete(string itemId, string attachmentId)
            {
                return new DeleteRequest(service, itemId, attachmentId);
            }

            /// <summary>Deletes an attachment from a timeline item.</summary>
            public class DeleteRequest : MirrorBaseServiceRequest<string>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, string itemId, string attachmentId)
                    : base(service)
                {
                    ItemId = itemId;
                    AttachmentId = attachmentId;
                    InitParameters();
                }


                /// <summary>The ID of the timeline item the attachment belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("itemId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ItemId { get; private set; }

                /// <summary>The ID of the attachment.</summary>
                [Google.Apis.Util.RequestParameterAttribute("attachmentId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AttachmentId { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "delete"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "DELETE"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "timeline/{itemId}/attachments/{attachmentId}"; }
                }

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "itemId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "itemId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "attachmentId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "attachmentId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Retrieves an attachment on a timeline item by item ID and attachment ID.</summary>
            /// <param name="itemId">The ID of the timeline item the attachment belongs to.</param>
            /// <param
            /// name="attachmentId">The ID of the attachment.</param>
            public virtual GetRequest Get(string itemId, string attachmentId)
            {
                return new GetRequest(service, itemId, attachmentId);
            }

            /// <summary>Retrieves an attachment on a timeline item by item ID and attachment ID.</summary>
            public class GetRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Attachment>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string itemId, string attachmentId)
                    : base(service)
                {
                    ItemId = itemId;
                    AttachmentId = attachmentId;
                    MediaDownloader = new Google.Apis.Download.MediaDownloader(service);
                    InitParameters();
                }


                /// <summary>The ID of the timeline item the attachment belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("itemId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ItemId { get; private set; }

                /// <summary>The ID of the attachment.</summary>
                [Google.Apis.Util.RequestParameterAttribute("attachmentId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AttachmentId { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "timeline/{itemId}/attachments/{attachmentId}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "itemId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "itemId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "attachmentId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "attachmentId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

                /// <summary>Gets the media downloader.</summary>
                public Google.Apis.Download.IMediaDownloader MediaDownloader { get; private set; }

                /// <summary>Synchronously download the media into the given stream.</summary>
                public virtual void Download(System.IO.Stream stream)
                {
                    MediaDownloader.Download(this.GenerateRequestUri(), stream);
                }

                /// <summary>Asynchronously download the media into the given stream.</summary>
                public virtual System.Threading.Tasks.Task<Google.Apis.Download.IDownloadProgress> DownloadAsync(System.IO.Stream stream)
                {
                    return MediaDownloader.DownloadAsync(this.GenerateRequestUri(), stream);
                }

                /// <summary>Asynchronously download the media into the given stream.</summary>
                public virtual System.Threading.Tasks.Task<Google.Apis.Download.IDownloadProgress> DownloadAsync(System.IO.Stream stream,
                    System.Threading.CancellationToken cancellationToken)
                {
                    return MediaDownloader.DownloadAsync(this.GenerateRequestUri(), stream, cancellationToken);
                }

            }

            /// <summary>Adds a new attachment to a timeline item.</summary>
            /// <param name="itemId">The ID of the timeline item the attachment belongs to.</param>
            public virtual InsertRequest Insert(string itemId)
            {
                return new InsertRequest(service, itemId);
            }

            /// <summary>Adds a new attachment to a timeline item.</summary>
            public class InsertRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.Attachment>
            {
                /// <summary>Constructs a new Insert request.</summary>
                public InsertRequest(Google.Apis.Services.IClientService service, string itemId)
                    : base(service)
                {
                    ItemId = itemId;
                    InitParameters();
                }


                /// <summary>The ID of the timeline item the attachment belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("itemId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ItemId { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "insert"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "timeline/{itemId}/attachments"; }
                }

                /// <summary>Initializes Insert parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "itemId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "itemId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Adds a new attachment to a timeline item.</summary>

            /// <param name="itemId">The ID of the timeline item the attachment belongs to.</param>
            /// <param name="stream">The stream to upload.</param>
            /// <param name="contentType">The content type of the stream to upload.</param>
            public virtual InsertMediaUpload Insert(string itemId, System.IO.Stream stream, string contentType)
            {
                return new InsertMediaUpload(service, itemId, stream, contentType);
            }

            /// <summary>Insert media upload which supports resumable upload.</summary>
            public class InsertMediaUpload : Google.Apis.Upload.ResumableUpload<string, Google.Apis.Mirror.v1.Data.Attachment>
            {

                /// <summary>Data format for the response.</summary>
                /// [default: json]
                [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<AltEnum> Alt { get; set; }

                /// <summary>Data format for the response.</summary>
                public enum AltEnum
                {
                    /// <summary>Responses with Content-Type of application/json</summary>
                    [Google.Apis.Util.StringValueAttribute("json")]
                    Json,
                }

                /// <summary>Selector specifying which fields to include in a partial response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Fields { get; set; }

                /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and
                /// reports. Required unless you provide an OAuth 2.0 token.</summary>
                [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Key { get; set; }

                /// <summary>OAuth 2.0 token for the current user.</summary>
                [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string OauthToken { get; set; }

                /// <summary>Returns response with indentations and line breaks.</summary>
                /// [default: true]
                [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<bool> PrettyPrint { get; set; }

                /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary
                /// string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are
                /// provided.</summary>
                [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string QuotaUser { get; set; }

                /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-
                /// user limits.</summary>
                [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string UserIp { get; set; }


                /// <summary>The ID of the timeline item the attachment belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("itemId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ItemId { get; private set; }

                /// <summary>Constructs a new Insert media upload instance.</summary>
                public InsertMediaUpload(Google.Apis.Services.IClientService service, string
                 itemId, System.IO.Stream stream, string contentType)
                    : base(service, string.Format("/{0}/{1}{2}", "upload", service.BasePath, "timeline/{itemId}/attachments"), "POST", stream, contentType)
                {
                    ItemId = itemId;
                }
            }

            /// <summary>Returns a list of attachments for a timeline item.</summary>
            /// <param name="itemId">The ID of the timeline item whose attachments should be listed.</param>
            public virtual ListRequest List(string itemId)
            {
                return new ListRequest(service, itemId);
            }

            /// <summary>Returns a list of attachments for a timeline item.</summary>
            public class ListRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.AttachmentsListResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string itemId)
                    : base(service)
                {
                    ItemId = itemId;
                    InitParameters();
                }


                /// <summary>The ID of the timeline item whose attachments should be listed.</summary>
                [Google.Apis.Util.RequestParameterAttribute("itemId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ItemId { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "timeline/{itemId}/attachments"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "itemId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "itemId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Deletes a timeline item.</summary>
        /// <param name="id">The ID of the timeline item.</param>
        public virtual DeleteRequest Delete(string id)
        {
            return new DeleteRequest(service, id);
        }

        /// <summary>Deletes a timeline item.</summary>
        public class DeleteRequest : MirrorBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string id)
                : base(service)
            {
                Id = id;
                InitParameters();
            }


            /// <summary>The ID of the timeline item.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "timeline/{id}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a single timeline item by ID.</summary>
        /// <param name="id">The ID of the timeline item.</param>
        public virtual GetRequest Get(string id)
        {
            return new GetRequest(service, id);
        }

        /// <summary>Gets a single timeline item by ID.</summary>
        public class GetRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.TimelineItem>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string id)
                : base(service)
            {
                Id = id;
                InitParameters();
            }


            /// <summary>The ID of the timeline item.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "timeline/{id}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Inserts a new item into the timeline.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual InsertRequest Insert(Google.Apis.Mirror.v1.Data.TimelineItem body)
        {
            return new InsertRequest(service, body);
        }

        /// <summary>Inserts a new item into the timeline.</summary>
        public class InsertRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.TimelineItem>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.TimelineItem body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.TimelineItem Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "timeline"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Inserts a new item into the timeline.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="stream">The stream to upload.</param>
        /// <param name="contentType">The content type of the stream to upload.</param>
        public virtual InsertMediaUpload Insert(Google.Apis.Mirror.v1.Data.TimelineItem body, System.IO.Stream stream, string contentType)
        {
            return new InsertMediaUpload(service, body, stream, contentType);
        }

        /// <summary>Insert media upload which supports resumable upload.</summary>
        public class InsertMediaUpload : Google.Apis.Upload.ResumableUpload<Google.Apis.Mirror.v1.Data.TimelineItem, Google.Apis.Mirror.v1.Data.TimelineItem>
        {

            /// <summary>Data format for the response.</summary>
            /// [default: json]
            [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<AltEnum> Alt { get; set; }

            /// <summary>Data format for the response.</summary>
            public enum AltEnum
            {
                /// <summary>Responses with Content-Type of application/json</summary>
                [Google.Apis.Util.StringValueAttribute("json")]
                Json,
            }

            /// <summary>Selector specifying which fields to include in a partial response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Fields { get; set; }

            /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and
            /// reports. Required unless you provide an OAuth 2.0 token.</summary>
            [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Key { get; set; }

            /// <summary>OAuth 2.0 token for the current user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OauthToken { get; set; }

            /// <summary>Returns response with indentations and line breaks.</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> PrettyPrint { get; set; }

            /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
            /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are
            /// provided.</summary>
            [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string QuotaUser { get; set; }

            /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
            /// limits.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UserIp { get; set; }


            /// <summary>Constructs a new Insert media upload instance.</summary>
            public InsertMediaUpload(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.TimelineItem body, System.IO.Stream stream, string contentType)
                : base(service, string.Format("/{0}/{1}{2}", "upload", service.BasePath, "timeline"), "POST", stream, contentType)
            {
                Body = body;
            }
        }

        /// <summary>Retrieves a list of timeline items for the authenticated user.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Retrieves a list of timeline items for the authenticated user.</summary>
        public class ListRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.TimelineListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>If provided, only items with the given bundleId will be returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("bundleId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string BundleId { get; set; }

            /// <summary>If true, tombstone records for deleted items will be returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("includeDeleted", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> IncludeDeleted { get; set; }

            /// <summary>The maximum number of items to include in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Controls the order in which timeline items are returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<OrderByEnum> OrderBy { get; set; }

            /// <summary>Controls the order in which timeline items are returned.</summary>
            public enum OrderByEnum
            {
                /// <summary>Results will be ordered by displayTime (default). This is the same ordering as is used in
                /// the timeline on the device.</summary>
                [Google.Apis.Util.StringValueAttribute("displayTime")]
                DisplayTime,
                /// <summary>Results will be ordered by the time at which they were last written to the data
                /// store.</summary>
                [Google.Apis.Util.StringValueAttribute("writeTime")]
                WriteTime,
            }

            /// <summary>Token for the page of results to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>If true, only pinned items will be returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pinnedOnly", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> PinnedOnly { get; set; }

            /// <summary>If provided, only items with the given sourceItemId will be returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("sourceItemId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string SourceItemId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "timeline"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "bundleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "bundleId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "includeDeleted", new Google.Apis.Discovery.Parameter
                    {
                        Name = "includeDeleted",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pinnedOnly", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pinnedOnly",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "sourceItemId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "sourceItemId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a timeline item in place. This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="id">The ID of the timeline item.</param>
        public virtual PatchRequest Patch(Google.Apis.Mirror.v1.Data.TimelineItem body, string id)
        {
            return new PatchRequest(service, body, id);
        }

        /// <summary>Updates a timeline item in place. This method supports patch semantics.</summary>
        public class PatchRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.TimelineItem>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.TimelineItem body, string id)
                : base(service)
            {
                Id = id;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the timeline item.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.TimelineItem Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "timeline/{id}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a timeline item in place.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="id">The ID of the timeline item.</param>
        public virtual UpdateRequest Update(Google.Apis.Mirror.v1.Data.TimelineItem body, string id)
        {
            return new UpdateRequest(service, body, id);
        }

        /// <summary>Updates a timeline item in place.</summary>
        public class UpdateRequest : MirrorBaseServiceRequest<Google.Apis.Mirror.v1.Data.TimelineItem>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.TimelineItem body, string id)
                : base(service)
            {
                Id = id;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the timeline item.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Mirror.v1.Data.TimelineItem Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "timeline/{id}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "id", new Google.Apis.Discovery.Parameter
                    {
                        Name = "id",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a timeline item in place.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="id">The ID of the timeline item.</param>
        /// <param name="stream">The stream to upload.</param>
        /// <param name="contentType">The content type of the stream to upload.</param>
        public virtual UpdateMediaUpload Update(Google.Apis.Mirror.v1.Data.TimelineItem body, string id, System.IO.Stream stream, string contentType)
        {
            return new UpdateMediaUpload(service, body, id, stream, contentType);
        }

        /// <summary>Update media upload which supports resumable upload.</summary>
        public class UpdateMediaUpload : Google.Apis.Upload.ResumableUpload<Google.Apis.Mirror.v1.Data.TimelineItem, Google.Apis.Mirror.v1.Data.TimelineItem>
        {

            /// <summary>Data format for the response.</summary>
            /// [default: json]
            [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<AltEnum> Alt { get; set; }

            /// <summary>Data format for the response.</summary>
            public enum AltEnum
            {
                /// <summary>Responses with Content-Type of application/json</summary>
                [Google.Apis.Util.StringValueAttribute("json")]
                Json,
            }

            /// <summary>Selector specifying which fields to include in a partial response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Fields { get; set; }

            /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and
            /// reports. Required unless you provide an OAuth 2.0 token.</summary>
            [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Key { get; set; }

            /// <summary>OAuth 2.0 token for the current user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OauthToken { get; set; }

            /// <summary>Returns response with indentations and line breaks.</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> PrettyPrint { get; set; }

            /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
            /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are
            /// provided.</summary>
            [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string QuotaUser { get; set; }

            /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
            /// limits.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UserIp { get; set; }


            /// <summary>The ID of the timeline item.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }

            /// <summary>Constructs a new Update media upload instance.</summary>
            public UpdateMediaUpload(Google.Apis.Services.IClientService service, Google.Apis.Mirror.v1.Data.TimelineItem body, string
             id, System.IO.Stream stream, string contentType)
                : base(service, string.Format("/{0}/{1}{2}", "upload", service.BasePath, "timeline/{id}"), "PUT", stream, contentType)
            {
                Id = id;
                Body = body;
            }
        }
    }
}

namespace Google.Apis.Mirror.v1.Data
{    

    /// <summary>Represents an account passed into the Account Manager on Glass.</summary>
    public class Account : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("authTokens")]
        public virtual System.Collections.Generic.IList<AuthToken> AuthTokens { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("features")]
        public virtual System.Collections.Generic.IList<string> Features { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("password")]
        public virtual string Password { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("userData")]
        public virtual System.Collections.Generic.IList<UserData> UserData { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents media content, such as a photo, that can be attached to a timeline item.</summary>
    public class Attachment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The MIME type of the attachment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentType")]
        public virtual string ContentType { get; set; } 

        /// <summary>The URL for the content.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentUrl")]
        public virtual string ContentUrl { get; set; } 

        /// <summary>The ID of the attachment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Indicates that the contentUrl is not available because the attachment content is still being
        /// processed. If the caller wishes to retrieve the content, it should try again later.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isProcessingContent")]
        public virtual System.Nullable<bool> IsProcessingContent { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A list of Attachments. This is the response from the server to GET requests on the attachments
    /// collection.</summary>
    public class AttachmentsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of attachments.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Attachment> Items { get; set; } 

        /// <summary>The type of resource. This is always mirror#attachmentsList.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class AuthToken : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("authToken")]
        public virtual string AuthTokenValue { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single menu command that is part of a Contact.</summary>
    public class Command : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The type of operation this command corresponds to. Allowed values are: - TAKE_A_NOTE - Shares a
        /// timeline item with the transcription of user speech from the "Take a note" voice menu command. -
        /// POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update"
        /// voice menu command.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person or group that can be used as a creator or a contact.</summary>
    public class Contact : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each
        /// voice menu command. If there are more than that, the three contacts with the highest priority are shown for
        /// that particular command.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("acceptCommands")]
        public virtual System.Collections.Generic.IList<Command> AcceptCommands { get; set; } 

        /// <summary>A list of MIME types that a contact supports. The contact will be shown to the user if any of its
        /// acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the
        /// contact will be shown for all items.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("acceptTypes")]
        public virtual System.Collections.Generic.IList<string> AcceptTypes { get; set; } 

        /// <summary>The name to display for this contact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>An ID for this contact. This is generated by the application and is treated as an opaque
        /// token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Set of image URLs to display for a contact. Most contacts will have a single image, but a "group"
        /// contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the
        /// client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imageUrls")]
        public virtual System.Collections.Generic.IList<string> ImageUrls { get; set; } 

        /// <summary>The type of resource. This is always mirror#contact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Primary phone number for the contact. This can be a fully-qualified number, with country calling
        /// code and area code, or a local number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneNumber")]
        public virtual string PhoneNumber { get; set; } 

        /// <summary>Priority for the contact to determine ordering in a list of contacts. Contacts with higher
        /// priorities will be shown before ones with lower priorities.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priority")]
        public virtual System.Nullable<long> Priority { get; set; } 

        /// <summary>A list of sharing features that a contact can handle. Allowed values are: - ADD_CAPTION</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sharingFeatures")]
        public virtual System.Collections.Generic.IList<string> SharingFeatures { get; set; } 

        /// <summary>The ID of the application that created this contact. This is populated by the API</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual string Source { get; set; } 

        /// <summary>Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a
        /// voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names
        /// with unpronounceable characters or whose display spelling is otherwise not phonetic.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("speakableName")]
        public virtual string SpeakableName { get; set; } 

        /// <summary>The type for this contact. This is used for sorting in UIs. Allowed values are: - INDIVIDUAL -
        /// Represents a single person. This is the default. - GROUP - Represents more than a single person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A list of Contacts representing contacts. This is the response from the server to GET requests on the
    /// contacts collection.</summary>
    public class ContactsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Contact list.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Contact> Items { get; set; } 

        /// <summary>The type of resource. This is always mirror#contacts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A geographic location that can be associated with a timeline item.</summary>
    public class Location : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The accuracy of the location fix in meters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accuracy")]
        public virtual System.Nullable<double> Accuracy { get; set; } 

        /// <summary>The full address of the location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("address")]
        public virtual string Address { get; set; } 

        /// <summary>The name to be displayed. This may be a business name or a user-defined place, such as
        /// "Home".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The ID of the location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The type of resource. This is always mirror#location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The latitude, in degrees.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("latitude")]
        public virtual System.Nullable<double> Latitude { get; set; } 

        /// <summary>The longitude, in degrees.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("longitude")]
        public virtual System.Nullable<double> Longitude { get; set; } 

        /// <summary>The time at which this location was captured, formatted according to RFC 3339.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string TimestampRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="TimestampRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Timestamp
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(TimestampRaw);
            }
            set
            {
                TimestampRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A list of Locations. This is the response from the server to GET requests on the locations
    /// collection.</summary>
    public class LocationsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of locations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Location> Items { get; set; } 

        /// <summary>The type of resource. This is always mirror#locationsList.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A custom menu item that can be presented to the user by a timeline item.</summary>
    public class MenuItem : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Controls the behavior when the user picks the menu option. Allowed values are: - CUSTOM - Custom
        /// action set by the service. When the user selects this menuItem, the API triggers a notification to your
        /// callbackUrl with the userActions.type set to CUSTOM and the userActions.payload set to the ID of this menu
        /// item. This is the default value. - Built-in actions: - REPLY - Initiate a reply to the timeline item using
        /// the voice recording UI. The creator attribute must be set in the timeline item for this menu to be
        /// available. - REPLY_ALL - Same behavior as REPLY. The original timeline item's recipients will be added to
        /// the reply item. - DELETE - Delete the timeline item. - SHARE - Share the timeline item with the available
        /// contacts. - READ_ALOUD - Read the timeline item's speakableText aloud; if this field is not set, read the
        /// text field; if none of those fields are set, this menu item is ignored. - GET_MEDIA_INPUT - Allow users to
        /// provide media payloads to Glassware from a menu item (currently, only transcribed text from voice input is
        /// supported). Subscribe to notifications when users invoke this menu item to receive the timeline item ID.
        /// Retrieve the media from the timeline item in the payload property. - VOICE_CALL - Initiate a phone call
        /// using the timeline item's creator.phoneNumber attribute as recipient. - NAVIGATE - Navigate to the timeline
        /// item's location. - TOGGLE_PINNED - Toggle the isPinned state of the timeline item. - OPEN_URI - Open the
        /// payload of the menu item in the browser. - PLAY_VIDEO - Open the payload of the menu item in the Glass video
        /// player. - SEND_MESSAGE - Initiate sending a message to the timeline item's creator: - If the
        /// creator.phoneNumber is set and Glass is connected to an Android phone, the message is an SMS. - Otherwise,
        /// if the creator.email is set, the message is an email.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("action")]
        public virtual string Action { get; set; } 

        /// <summary>The ContextualMenus.Command associated with this MenuItem (e.g. READ_ALOUD). The voice label for
        /// this command will be displayed in the voice menu and the touch label will be displayed in the touch menu.
        /// Note that the default menu value's display name will be overriden if you specify this property. Values that
        /// do not correspond to a ContextualMenus.Command name will be ignored.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contextual_command")]
        public virtual string ContextualCommand { get; set; } 

        /// <summary>The ID for this menu item. This is generated by the application and is treated as an opaque
        /// token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A generic payload whose meaning changes depending on this MenuItem's action. - When the action is
        /// OPEN_URI, the payload is the URL of the website to view. - When the action is PLAY_VIDEO, the payload is the
        /// streaming URL of the video - When the action is GET_MEDIA_INPUT, the payload is the text transcription of a
        /// user's speech input</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("payload")]
        public virtual string Payload { get; set; } 

        /// <summary>If set to true on a CUSTOM menu item, that item will be removed from the menu after it is
        /// selected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("removeWhenSelected")]
        public virtual System.Nullable<bool> RemoveWhenSelected { get; set; } 

        /// <summary>For CUSTOM items, a list of values controlling the appearance of the menu item in each of its
        /// states. A value for the DEFAULT state must be provided. If the PENDING or CONFIRMED states are missing, they
        /// will not be shown.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<MenuValue> Values { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single value that is part of a MenuItem.</summary>
    public class MenuValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name to display for the menu item. If you specify this property for a built-in menu item, the
        /// default contextual voice command for that menu item is not shown.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>URL of an icon to display with the menu item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("iconUrl")]
        public virtual string IconUrl { get; set; } 

        /// <summary>The state that this value applies to. Allowed values are: - DEFAULT - Default value shown when
        /// displayed in the menuItems list. - PENDING - Value shown when the menuItem has been selected by the user but
        /// can still be cancelled. - CONFIRMED - Value shown when the menuItem has been selected by the user and can no
        /// longer be cancelled.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A notification delivered by the API.</summary>
    public class Notification : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The collection that generated the notification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("collection")]
        public virtual string Collection { get; set; } 

        /// <summary>The ID of the item that generated the notification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; } 

        /// <summary>The type of operation that generated the notification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operation")]
        public virtual string Operation { get; set; } 

        /// <summary>A list of actions taken by the user that triggered the notification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userActions")]
        public virtual System.Collections.Generic.IList<UserAction> UserActions { get; set; } 

        /// <summary>The user token provided by the service when it subscribed for notifications.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userToken")]
        public virtual string UserToken { get; set; } 

        /// <summary>The secret verify token provided by the service when it subscribed for notifications.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verifyToken")]
        public virtual string VerifyToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Controls how notifications for a timeline item are presented to the user.</summary>
    public class NotificationConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The time at which the notification should be delivered.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryTime")]
        public virtual string DeliveryTimeRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="DeliveryTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> DeliveryTime
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(DeliveryTimeRaw);
            }
            set
            {
                DeliveryTimeRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>Describes how important the notification is. Allowed values are: - DEFAULT - Notifications of
        /// default importance. A chime will be played to alert users.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("level")]
        public virtual string Level { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A setting for Glass.</summary>
    public class Setting : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The setting's ID. The following IDs are valid: - locale - The key to the user’s language/locale
        /// (BCP 47 identifier) that Glassware should use to render localized content. - timezone - The key to the
        /// user’s current time zone region as defined in the tz database. Example: America/Los_Angeles.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The type of resource. This is always mirror#setting.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The setting value, as a string.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A subscription to events on a collection.</summary>
    public class Subscription : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The URL where notifications should be delivered (must start with https://).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callbackUrl")]
        public virtual string CallbackUrl { get; set; } 

        /// <summary>The collection to subscribe to. Allowed values are: - timeline - Changes in the timeline including
        /// insertion, deletion, and updates. - locations - Location updates. - settings - Settings updates.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("collection")]
        public virtual string Collection { get; set; } 

        /// <summary>The ID of the subscription.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The type of resource. This is always mirror#subscription.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Container object for notifications. This is not populated in the Subscription resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("notification")]
        public virtual Notification Notification { get; set; } 

        /// <summary>A list of operations that should be subscribed to. An empty list indicates that all operations on
        /// the collection should be subscribed to. Allowed values are: - UPDATE - The item has been updated. - INSERT -
        /// A new item has been inserted. - DELETE - The item has been deleted. - MENU_ACTION - A custom menu item has
        /// been triggered by the user.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operation")]
        public virtual System.Collections.Generic.IList<string> Operation { get; set; } 

        /// <summary>The time at which this subscription was last modified, formatted according to RFC 3339.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>An opaque token sent to the subscriber in notifications so that it can determine the ID of the
        /// user.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userToken")]
        public virtual string UserToken { get; set; } 

        /// <summary>A secret token sent to the subscriber in notifications so that it can verify that the notification
        /// was generated by Google.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verifyToken")]
        public virtual string VerifyToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A list of Subscriptions. This is the response from the server to GET requests on the subscription
    /// collection.</summary>
    public class SubscriptionsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of subscriptions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Subscription> Items { get; set; } 

        /// <summary>The type of resource. This is always mirror#subscriptionsList.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Each item in the user's timeline is represented as a TimelineItem JSON structure, described
    /// below.</summary>
    public class TimelineItem : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of media attachments associated with this item. As a convenience, you can refer to
        /// attachments in your HTML payloads with the attachment or cid scheme. For example: - attachment:  where
        /// attachment_index is the 0-based index of this array. - cid:  where attachment_id is the ID of the
        /// attachment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attachments")]
        public virtual System.Collections.Generic.IList<Attachment> Attachments { get; set; } 

        /// <summary>The bundle ID for this item. Services can specify a bundleId to group many items together. They
        /// appear under a single top-level item on the device.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bundleId")]
        public virtual string BundleId { get; set; } 

        /// <summary>A canonical URL pointing to the canonical/high quality version of the data represented by the
        /// timeline item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("canonicalUrl")]
        public virtual string CanonicalUrl { get; set; } 

        /// <summary>The time at which this item was created, formatted according to RFC 3339.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("created")]
        public virtual string CreatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="CreatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Created
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(CreatedRaw);
            }
            set
            {
                CreatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The user or group that created this item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creator")]
        public virtual Contact Creator { get; set; } 

        /// <summary>The time that should be displayed when this item is viewed in the timeline, formatted according to
        /// RFC 3339. This user's timeline is sorted chronologically on display time, so this will also determine where
        /// the item is displayed in the timeline. If not set by the service, the display time defaults to the updated
        /// time.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayTime")]
        public virtual string DisplayTimeRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="DisplayTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> DisplayTime
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(DisplayTimeRaw);
            }
            set
            {
                DisplayTimeRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>ETag for this item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>HTML content for this item. If both text and html are provided for an item, the html will be
        /// rendered in the timeline. Allowed HTML elements - You can use these elements in your timeline cards.
        ///
        /// - Headers: h1, h2, h3, h4, h5, h6 - Images: img - Lists: li, ol, ul - HTML5 semantics: article, aside,
        /// details, figure, figcaption, footer, header, nav, section, summary, time - Structural: blockquote, br, div,
        /// hr, p, span - Style: b, big, center, em, i, u, s, small, strike, strong, style, sub, sup - Tables: table,
        /// tbody, td, tfoot, th, thead, tr Blocked HTML elements: These elements and their contents are removed from
        /// HTML payloads.
        ///
        /// - Document headers: head, title - Embeds: audio, embed, object, source, video - Frames: frame, frameset -
        /// Scripting: applet, script Other elements: Any elements that aren't listed are removed, but their contents
        /// are preserved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("html")]
        public virtual string Html { get; set; } 

        /// <summary>The ID of the timeline item. This is unique within a user's timeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>If this item was generated as a reply to another item, this field will be set to the ID of the item
        /// being replied to. This can be used to attach a reply to the appropriate conversation or post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inReplyTo")]
        public virtual string InReplyTo { get; set; } 

        /// <summary>Whether this item is a bundle cover.
        ///
        /// If an item is marked as a bundle cover, it will be the entry point to the bundle of items that have the same
        /// bundleId as that item. It will be shown only on the main timeline — not within the opened bundle.
        ///
        /// On the main timeline, items that are shown are: - Items that have isBundleCover set to true - Items that do
        /// not have a bundleId  In a bundle sub-timeline, items that are shown are: - Items that have the bundleId in
        /// question AND isBundleCover set to false</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isBundleCover")]
        public virtual System.Nullable<bool> IsBundleCover { get; set; } 

        /// <summary>When true, indicates this item is deleted, and only the ID property is set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isDeleted")]
        public virtual System.Nullable<bool> IsDeleted { get; set; } 

        /// <summary>When true, indicates this item is pinned, which means it's grouped alongside "active" items like
        /// navigation and hangouts, on the opposite side of the home screen from historical (non-pinned) timeline
        /// items. You can allow the user to toggle the value of this property with the TOGGLE_PINNED built-in menu
        /// item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isPinned")]
        public virtual System.Nullable<bool> IsPinned { get; set; } 

        /// <summary>The type of resource. This is always mirror#timelineItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The geographic location associated with this item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual Location Location { get; set; } 

        /// <summary>A list of menu items that will be presented to the user when this item is selected in the
        /// timeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("menuItems")]
        public virtual System.Collections.Generic.IList<MenuItem> MenuItems { get; set; } 

        /// <summary>Controls how notifications for this item are presented on the device. If this is missing, no
        /// notification will be generated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("notification")]
        public virtual NotificationConfig Notification { get; set; } 

        /// <summary>For pinned items, this determines the order in which the item is displayed in the timeline, with a
        /// higher score appearing closer to the clock. Note: setting this field is currently not supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pinScore")]
        public virtual System.Nullable<int> PinScore { get; set; } 

        /// <summary>A list of users or groups that this item has been shared with.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("recipients")]
        public virtual System.Collections.Generic.IList<Contact> Recipients { get; set; } 

        /// <summary>A URL that can be used to retrieve this item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>Opaque string you can use to map a timeline item to data in your own service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceItemId")]
        public virtual string SourceItemId { get; set; } 

        /// <summary>The speakable version of the content of this item. Along with the READ_ALOUD menu item, use this
        /// field to provide text that would be clearer when read aloud, or to provide extended information to what is
        /// displayed visually on Glass.
        ///
        /// Glassware should also specify the speakableType field, which will be spoken before this text in cases where
        /// the additional context is useful, for example when the user requests that the item be read aloud following a
        /// notification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("speakableText")]
        public virtual string SpeakableText { get; set; } 

        /// <summary>A speakable description of the type of this item. This will be announced to the user prior to
        /// reading the content of the item in cases where the additional context is useful, for example when the user
        /// requests that the item be read aloud following a notification.
        ///
        /// This should be a short, simple noun phrase such as "Email", "Text message", or "Daily Planet News Update".
        ///
        /// Glassware are encouraged to populate this field for every timeline item, even if the item does not contain
        /// speakableText or text so that the user can learn the type of the item without looking at the
        /// screen.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("speakableType")]
        public virtual string SpeakableType { get; set; } 

        /// <summary>Text content of this item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("text")]
        public virtual string Text { get; set; } 

        /// <summary>The title of this item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The time at which this item was last modified, formatted according to RFC 3339.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

    }    

    /// <summary>A list of timeline items. This is the response from the server to GET requests on the timeline
    /// collection.</summary>
    public class TimelineListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Items in the timeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<TimelineItem> Items { get; set; } 

        /// <summary>The type of resource. This is always mirror#timeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The next page token. Provide this as the pageToken parameter in the request to retrieve the next
        /// page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents an action taken by the user that triggered a notification.</summary>
    public class UserAction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An optional payload for the action.
        ///
        /// For actions of type CUSTOM, this is the ID of the custom menu item that was selected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("payload")]
        public virtual string Payload { get; set; } 

        /// <summary>The type of action. The value of this can be: - SHARE - the user shared an item. - REPLY - the user
        /// replied to an item. - REPLY_ALL - the user replied to all recipients of an item. - CUSTOM - the user
        /// selected a custom menu item on the timeline item. - DELETE - the user deleted the item. - PIN - the user
        /// pinned the item. - UNPIN - the user unpinned the item. - LAUNCH - the user initiated a voice command.  In
        /// the future, additional types may be added. UserActions with unrecognized types should be ignored.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class UserData : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
